OSD PXE изнутри
В посте не рассматривается процесс настройки инфраструктуры (работа с образами и драйверами, установка и настройка WDS и PXE service point, и т.д.). Пост является попыткой разобраться в логике процесса установки ОС по сети и предназначается опытным администраторам SCCM, которые неоднократно устанавливали операционную систему по сети и теперь хотят увидеть процесс «изнутри». Пост не претендует на глубокую техническую статью.
Итак, на DHCP обычно настраивают три опции:
60 = PXEClient — указывается, если службы DHCP и WDS совмещены на одном сервере. Помимо этого параметра в настройках WDS нужно отметить чекбокс «Не прослушивать порт 67».
66 = IP-адрес WDS. Указывается в том случае, если компьютер, загружающийся по сети, и WDS находятся в разных подсетях.
67 = SMSboot\x86\wdsnbp.com — путь к программе сетевой загрузки. Файл является NBP(network boot program)-файлом и был разработан для WDS — отсюда и название.
wdsnbp.com используется для определения firmware и архитектуры компьютера (один файл используется для обеих архитектур) и направления на сетевую загрузку. После установки PXE service point на WDS-сервер в папке \RemoteInstall появляется папка SMSboot, в которой находятся пустые папки x86, x64 и ia64. Когда загрузочные образы попадают на точку распространения PXE, эти папки заполняются служебными файлами, в числе которых и wdsnbp.com.
Для написания поста использовалась следующая тестовая лаборатория:
192.168.0.15 — DC + SQL Server + DHCP + distribution point;
192.168.0.25 — SCCM 2007 SP2 R3beta;
192.168.0.140 — WDS + PXE service point.
Поскольку службы DHCP и WDS разнесены, и все компьютеры тестового стенда находятся в одной подсети, то имеем следующие настройки:
После «поднятия» сетевого интерфейса проходит стандартный процесс DHCP DORA с той лишь разницей, что предложение присылает ещё и WDS-сервер:
WDS предлагает сам себя в качестве PXE-сервера:
DHCP же предлагает IP-адрес с опциями. Замечу, что клиент не получает адрес PXE-сервера, потому что он не включён в опциях:
PXE-клиент отвечает только на предложение DHCP-сервера. Это сделано by design. После этого клиент снова соединяется по DHCP с WDS, но уже unicast-запросом, и по TFTP скачивает файл:
wdsnbp.com определяет архитектуру и вызывает загрузчик pxeboot.com, соответствующий архитектуре и требующий нажатия F12 для продолжения загрузки РХЕ:
В это же время РХЕ-сервер через SMS Provider опрашивает SCCM на предмет политик для загружающегося клиента, что отображено в логах StatusAgent.log и PolicyEvaluator.log:
Raising event:
instance of CCM_PolicyAgent_PolicyEvaluationComplete
{
ClientID = «GUID:0E680A72-5457-4D75-9D11-32A56C4231A0»;
DateTime = «20101002152452.241000+000»;
PolicyNamespace = «\\\\SRV2\\ROOT\\ccm\\Policy\\Machine\\RequestedConfig«;
ProcessID = 1788;
ThreadID = 1560;
};
Также в smspxe.log видна информация по MAC-адресу и SMBIOS GUID компьютера, загружающего по сети, назначенное ему объявление, откуда вытягивается информация о требуемом загрузочном образе, и обнаруженная точка управления:
Advertisement results: OfferId:00020007 OfferTime:23/08/2010 02:42:00 PackageID:0000000F BootImageID:00000010 PackageVer: PackagePath:\\PXE\SMSPXEIMAGES$\SMSPKG\00000010\ Mandatory:0
GetSiteTypeAndDefaultMP: SiteType=2 DefaultMP=SRV2.FIRMA.LOCAL
MAC=00:0C:29:70:39:D8 SMBIOS GUID=2B3B4D56-4633-B252-F3B7-014EF37039D8 > Device has been accepted.
После нажатия F12 PXEBoot.com загружает bootmgr.exe и хранилище данных конфигурации загрузки Boot Configuration Data (BCD) в оперативную память.
BCD являются заменой файлу boot.ini, использовавшемуся раньше. BCD состоит из объектов, элементов и хранилища, и представляет собой записи о настройках загрузки операционной системы. Bootmgr.exe считывает записи операционной системы данных конфигурации загрузки из элементов BCD и передаёт их ядру, загружает в создаваемый виртуальный раздел RAMDISK файл boot.sdi, находящийся в папке \RemoteInstall\SMSboot, .wim-образ, указанный в объявлении, и шрифты, требуемые для отображения меню. boot.sdi — образ диска (раздел), который был отформатирован на файловой системе NTFS. Процесс загрузки RAMDISK помещает boot.sdi в память и указывает загрузчику на этот файл, как если бы он был реальным диском. Загрузчик операционной системы монтирует этот NTFS-раздел и начинает искать по нему .wim-образ, содержащий Windows PE.
Bootmgr.exe начинает загрузку Windows PE, обращаясь к загрузчику Winload.exe в образе Windows PE: